#include <stdio.h>

int main(void)
{

    // 双引号中的字符和编译器自动加入末尾的\0字符，都作为字符串存储在内存中
    const char *pt1 = "使用 char * 指针表示字符串";
    char ch[] = "使用 char[] 数组表示字符串";

    puts(pt1);
    puts(ch);

    // 抛出异常,因为 指针指向的是静态存储区中的字符串常量,不能对其进行修改
    // 直接使用 指针修改 静态存储区中的字符串常量的结果是未定义的,强行修改将导致未知的后果
    //
    //*pt1 = 'A';
    // puts(pt1);

    puts("请输入字符串");

    char str[30];

    /**
     * ● fgets()函数的第2个参数指明了读入字符的最大数量。
     * 如果该参数的值是n，那么fgets()将读入n-1个字符，
     * 或者读到遇到的第一个换行符为止。
     *
     * ● 如果fgets()读到一个换行符，会把它存储在字符串中。
     * 这点与gets()不同，gets()会丢弃换行符。
     *
     * ● fgets()函数的第3个参数指明要读入的文件。
     * 如果读入从键盘输入的数据，则以stdin（标准输入）作为参数，
     * 该标识符定义在stdio.h中。
     */
    fgets(str, 30, stdin);

    /*
     * 因为fgets()函数把换行符放在字符串的末尾（假设输入行不溢出），
     * 通常要与fputs()函数（和puts()类似）配对使用，
     * 除非该函数不在字符串末尾添加换行符。
     * fputs()函数的第2个参数指明它要写入的文件。
     * 如果要显示在计算机显示器上，应使用stdout（标准输出）作为该参数。
     */

    fputs(str,stdout);
}